package s3
import (
awsmiddleware
s3cust
smithytime
smithyhttp
smithywaiter
)
func ( *Client) ( context.Context, *HeadBucketInput, ...func(*Options)) (*HeadBucketOutput, error) {
if == nil {
= &HeadBucketInput{}
}
, , := .invokeOperation(, "HeadBucket", , , .addOperationHeadBucketMiddlewares)
if != nil {
return nil,
}
:= .(*HeadBucketOutput)
.ResultMetadata =
return , nil
}
type HeadBucketInput struct {
Bucket *string
ExpectedBucketOwner *string
noSmithyDocumentSerde
}
type HeadBucketOutput struct {
ResultMetadata middleware.Metadata
noSmithyDocumentSerde
}
func ( *Client) ( *middleware.Stack, Options) ( error) {
= .Serialize.Add(&awsRestxml_serializeOpHeadBucket{}, middleware.After)
if != nil {
return
}
= .Deserialize.Add(&awsRestxml_deserializeOpHeadBucket{}, middleware.After)
if != nil {
return
}
if = addSetLoggerMiddleware(, ); != nil {
return
}
if = awsmiddleware.AddClientRequestIDMiddleware(); != nil {
return
}
if = smithyhttp.AddComputeContentLengthMiddleware(); != nil {
return
}
if = addResolveEndpointMiddleware(, ); != nil {
return
}
if = v4.AddComputePayloadSHA256Middleware(); != nil {
return
}
if = addRetryMiddlewares(, ); != nil {
return
}
if = addHTTPSignerV4Middleware(, ); != nil {
return
}
if = awsmiddleware.AddRawResponseToMetadata(); != nil {
return
}
if = awsmiddleware.AddRecordResponseTiming(); != nil {
return
}
if = addClientUserAgent(); != nil {
return
}
if = smithyhttp.AddErrorCloseResponseBodyMiddleware(); != nil {
return
}
if = smithyhttp.AddCloseResponseBodyMiddleware(); != nil {
return
}
if = swapWithCustomHTTPSignerMiddleware(, ); != nil {
return
}
if = addOpHeadBucketValidationMiddleware(); != nil {
return
}
if = .Initialize.Add(newServiceMetadataMiddleware_opHeadBucket(.Region), middleware.Before); != nil {
return
}
if = addMetadataRetrieverMiddleware(); != nil {
return
}
if = addHeadBucketUpdateEndpoint(, ); != nil {
return
}
if = addResponseErrorMiddleware(); != nil {
return
}
if = v4.AddContentSHA256HeaderMiddleware(); != nil {
return
}
if = disableAcceptEncodingGzip(); != nil {
return
}
if = addRequestResponseLogging(, ); != nil {
return
}
return nil
}
type HeadBucketAPIClient interface {
HeadBucket(context.Context, *HeadBucketInput, ...func(*Options)) (*HeadBucketOutput, error)
}
var _ HeadBucketAPIClient = (*Client)(nil)
type BucketExistsWaiterOptions struct {
APIOptions []func(*middleware.Stack) error
MinDelay time.Duration
MaxDelay time.Duration
LogWaitAttempts bool
Retryable func(context.Context, *HeadBucketInput, *HeadBucketOutput, error) (bool, error)
}
type BucketExistsWaiter struct {
client HeadBucketAPIClient
options BucketExistsWaiterOptions
}
func ( HeadBucketAPIClient, ...func(*BucketExistsWaiterOptions)) *BucketExistsWaiter {
:= BucketExistsWaiterOptions{}
.MinDelay = 5 * time.Second
.MaxDelay = 120 * time.Second
.Retryable = bucketExistsStateRetryable
for , := range {
(&)
}
return &BucketExistsWaiter{
client: ,
options: ,
}
}
func ( *BucketExistsWaiter) ( context.Context, *HeadBucketInput, time.Duration, ...func(*BucketExistsWaiterOptions)) error {
, := .WaitForOutput(, , , ...)
return
}
func ( *BucketExistsWaiter) ( context.Context, *HeadBucketInput, time.Duration, ...func(*BucketExistsWaiterOptions)) (*HeadBucketOutput, error) {
if <= 0 {
return nil, fmt.Errorf("maximum wait time for waiter must be greater than zero")
}
:= .options
for , := range {
(&)
}
if .MaxDelay <= 0 {
.MaxDelay = 120 * time.Second
}
if .MinDelay > .MaxDelay {
return nil, fmt.Errorf("minimum waiter delay %v must be lesser than or equal to maximum waiter delay of %v.", .MinDelay, .MaxDelay)
}
, := context.WithTimeout(, )
defer ()
:= smithywaiter.Logger{}
:=
var int64
for {
++
:= .APIOptions
:= time.Now()
if .LogWaitAttempts {
.Attempt =
= append([]func(*middleware.Stack) error{}, .APIOptions...)
= append(, .AddLogger)
}
, := .client.HeadBucket(, , func( *Options) {
.APIOptions = append(.APIOptions, ...)
})
, := .Retryable(, , , )
if != nil {
return nil,
}
if ! {
return , nil
}
-= time.Since()
if < .MinDelay || <= 0 {
break
}
, := smithywaiter.ComputeDelay(
, .MinDelay, .MaxDelay, ,
)
if != nil {
return nil, fmt.Errorf("error computing waiter delay, %w", )
}
-=
if := smithytime.SleepWithContext(, ); != nil {
return nil, fmt.Errorf("request cancelled while waiting, %w", )
}
}
return nil, fmt.Errorf("exceeded max wait time for BucketExists waiter")
}
func ( context.Context, *HeadBucketInput, *HeadBucketOutput, error) (bool, error) {
if == nil {
return false, nil
}
if != nil {
var *types.NotFound
if errors.As(, &) {
return true, nil
}
}
return true, nil
}
type BucketNotExistsWaiterOptions struct {
APIOptions []func(*middleware.Stack) error
MinDelay time.Duration
MaxDelay time.Duration
LogWaitAttempts bool
Retryable func(context.Context, *HeadBucketInput, *HeadBucketOutput, error) (bool, error)
}
type BucketNotExistsWaiter struct {
client HeadBucketAPIClient
options BucketNotExistsWaiterOptions
}
func ( HeadBucketAPIClient, ...func(*BucketNotExistsWaiterOptions)) *BucketNotExistsWaiter {
:= BucketNotExistsWaiterOptions{}
.MinDelay = 5 * time.Second
.MaxDelay = 120 * time.Second
.Retryable = bucketNotExistsStateRetryable
for , := range {
(&)
}
return &BucketNotExistsWaiter{
client: ,
options: ,
}
}
func ( *BucketNotExistsWaiter) ( context.Context, *HeadBucketInput, time.Duration, ...func(*BucketNotExistsWaiterOptions)) error {
, := .WaitForOutput(, , , ...)
return
}
func ( *BucketNotExistsWaiter) ( context.Context, *HeadBucketInput, time.Duration, ...func(*BucketNotExistsWaiterOptions)) (*HeadBucketOutput, error) {
if <= 0 {
return nil, fmt.Errorf("maximum wait time for waiter must be greater than zero")
}
:= .options
for , := range {
(&)
}
if .MaxDelay <= 0 {
.MaxDelay = 120 * time.Second
}
if .MinDelay > .MaxDelay {
return nil, fmt.Errorf("minimum waiter delay %v must be lesser than or equal to maximum waiter delay of %v.", .MinDelay, .MaxDelay)
}
, := context.WithTimeout(, )
defer ()
:= smithywaiter.Logger{}
:=
var int64
for {
++
:= .APIOptions
:= time.Now()
if .LogWaitAttempts {
.Attempt =
= append([]func(*middleware.Stack) error{}, .APIOptions...)
= append(, .AddLogger)
}
, := .client.HeadBucket(, , func( *Options) {
.APIOptions = append(.APIOptions, ...)
})
, := .Retryable(, , , )
if != nil {
return nil,
}
if ! {
return , nil
}
-= time.Since()
if < .MinDelay || <= 0 {
break
}
, := smithywaiter.ComputeDelay(
, .MinDelay, .MaxDelay, ,
)
if != nil {
return nil, fmt.Errorf("error computing waiter delay, %w", )
}
-=
if := smithytime.SleepWithContext(, ); != nil {
return nil, fmt.Errorf("request cancelled while waiting, %w", )
}
}
return nil, fmt.Errorf("exceeded max wait time for BucketNotExists waiter")
}
func ( context.Context, *HeadBucketInput, *HeadBucketOutput, error) (bool, error) {
if != nil {
var *types.NotFound
if errors.As(, &) {
return false, nil
}
}
return true, nil
}
func ( string) *awsmiddleware.RegisterServiceMetadata {
return &awsmiddleware.RegisterServiceMetadata{
Region: ,
ServiceID: ServiceID,
SigningName: "s3",
OperationName: "HeadBucket",
}
}
func ( interface{}) (*string, bool) {
:= .(*HeadBucketInput)
if .Bucket == nil {
return nil, false
}
return .Bucket, true
}
func ( *middleware.Stack, Options) error {
return s3cust.UpdateEndpoint(, s3cust.UpdateEndpointOptions{
Accessor: s3cust.UpdateEndpointParameterAccessor{
GetBucketFromInput: getHeadBucketBucketMember,
},
UsePathStyle: .UsePathStyle,
UseAccelerate: .UseAccelerate,
SupportsAccelerate: true,
TargetS3ObjectLambda: false,
EndpointResolver: .EndpointResolver,
EndpointResolverOptions: .EndpointOptions,
UseARNRegion: .UseARNRegion,
DisableMultiRegionAccessPoints: .DisableMultiRegionAccessPoints,
})
}
func ( *PresignClient) ( context.Context, *HeadBucketInput, ...func(*PresignOptions)) (*v4.PresignedHTTPRequest, error) {
if == nil {
= &HeadBucketInput{}
}
:= .options.copy()
for , := range {
(&)
}
:= append(.ClientOptions, withNopHTTPClientAPIOption)
, , := .client.invokeOperation(, "HeadBucket", , ,
.client.addOperationHeadBucketMiddlewares,
presignConverter().convertToPresignMiddleware,
addHeadBucketPayloadAsUnsigned,
)
if != nil {
return nil,
}
:= .(*v4.PresignedHTTPRequest)
return , nil
}
func ( *middleware.Stack, Options) error {
v4.RemoveContentSHA256HeaderMiddleware()
v4.RemoveComputePayloadSHA256Middleware()
return v4.AddUnsignedPayloadMiddleware()
}